#ifndef ARVOREB
#define ARVOREB

#include <stdlib.h>
#include <stdio.h>

/* Cada registro tem dois ponteiros do tipo Pagina: filha menor e filha maior */
struct Registro {
	char matricula[9];
	int prr;
	struct Pagina *filha_menor, *filha_maior;
};
typedef struct Registro *ptrReg;

/* Página */
struct Pagina {
	struct Registro *pagina[20];
	struct Pagina *pai;
};
typedef struct Pagina *ptrPag;

typedef FILE *ptrArq;

/* Protótipos */
ptrReg lerRegistro(ptrArq *file,char c,int prr);
void imprimeRegistros(ptrArq *file);
void inicializaPagina(ptrPag *pag_root, ptrPag *pag_atual, ptrReg *reg, int ordem);
void insereRegistro(ptrPag *pag_atual, ptrReg *reg, int ordem);
int verificaEspacoInsercaoRegistro(ptrPag *pag_atual, int ordem);
int comparaStrings(char str1[], char str2[]);
void ordenaRegistros(ptrPag *pag_atual,int ordem);
void ordenaPonteiro(ptrPag *pag_atual,int ordem);
ptrReg utilizaElementoPromovido(ptrPag *pag_atual,int *ind_promov,int ordem);
void copiaPagina(ptrPag *pag_origem,ptrPag *pag_destino,int ordem);
void limpaPagina(ptrPag *pag_menor,ptrPag *pag_maior,int indice,int ordem);
void ordenaArvoreB(ptrPag *pag_root,ptrPag *pag_atual,ptrReg *reg,int ordem);
ptrPag insereElementoPagina(ptrPag *pag_atual,char chave[],int ordem);
void imprimePaginaArquivoIndice(ptrArq *file_Btree,ptrPag *root,int ordem);
void carregaPagina(ptrArq *file_Btree,ptrPag *pagina);
int procurarChave(ptrPag *pagina,char matricula[]);
#endif /*ARVOREB*/
